import { config } from '../../utils/config';
Page({
  data: {
    currentPatient: null,
    inputValue: '你好，你有哪里不舒服？', // 初始化输入框提示文字
    messages: [],
    patientId: '', // 存储当前AI病人的bot_id
    aiMessage: null as any // 用于累积流式响应的临时变量
  },

  onLoad(options: any) {
    console.log('接收的参数:', options)
    const { patient_id } = options;
    
    if (!patient_id) {
      wx.showToast({ title: '参数错误', icon: 'none' });
      setTimeout(() => wx.navigateBack(), 1500);
      return;
    }

    // 检查登录状态
    if (!this.checkLoginStatus()) return;

    this.setData({
      patientId: patient_id,
      messages: []
    });

    // 设置页面标题
    wx.setNavigationBarTitle({
      title: 'AI问诊对话'
    });
  },

  // 检查登录状态
  checkLoginStatus() {
    const userInfo = wx.getStorageSync('userInfo')
    if (!userInfo || !userInfo.access) {
      wx.redirectTo({ url: '/pages/login/login' })
      return false;
    }
    return true;
  },

  onInputChange(e: any) {
    this.setData({
      inputValue: e.detail.value  // 保留原始输入
    });
  },

  sendMessage() {
    const userInput = this.data.inputValue.trim();
    if (!userInput) return;

    // 重置AI消息临时变量
    this.setData({ aiMessage: null });

    // 添加用户消息到界面
    const userMessage = {
      type: 'user',
      content: userInput,
      time: new Date().getTime()
    };
    
    const messages = [...this.data.messages, userMessage];
    this.setData({
      messages,
      inputValue: ''
    });

    // 调用API获取AI回复
    this.getAiResponse(userInput);
  },

  getAiResponse(userInput: string) {
    const userInfo = wx.getStorageSync('userInfo')
    const { patientId } = this.data;
  
    console.log('开始请求AI响应:', {
      patientId,
      userInput,
      hasToken: !!userInfo.access
    });
    
    wx.request({
      url: `${config.baseUrl}/api/v1/get_ai_response/`,
      method: 'POST',
      header: {
        'Authorization': `Bearer ${userInfo.access}`,
        'Content-Type': 'application/json'
      },
      data: {
        patient_id: patientId,
        message: userInput
      },
      success: (res) => {
        console.log('HTTP响应状态:', res.statusCode);
  
        if (res.statusCode !== 200) {
          wx.showToast({ title: `网络错误: ${res.statusCode}`, icon: 'none' });
          return;
        }

        // 处理流式响应数据
        const responseText = res.data;
        if (!responseText) {
          wx.showToast({ title: '未收到响应数据', icon: 'none' });
          return;
        }

        // 分割流式响应中的多个JSON对象
        const lines = responseText.split('\n')
          .map(line => line.trim())
          .filter(line => line.startsWith('data: '))
          .map(line => line.replace('data: ', ''));

        // 处理每一行数据
        lines.forEach(line => {
          try {
            const data = JSON.parse(line);
            
            // 处理增量内容
            if (data.type === 'delta' && data.content !== undefined) {
              let { aiMessage, messages } = this.data;
              
              // 如果是新的AI消息，创建消息对象
              if (!aiMessage) {
                aiMessage = {
                  type: 'ai',
                  content: data.content,
                  time: new Date().getTime(),
                };
                messages.push(aiMessage);
              } else {
                // 累加内容
                aiMessage.content += data.content;
              }
              
              // 更新界面
              this.setData({ messages, aiMessage });
            } 
            // 处理结束标识
            else if (data.type === 'complete') {
              console.log('AI响应完成，token使用量:', data.token_usage);
              this.setData({ aiMessage: null }); // 重置临时变量
            }
          } catch (e) {
            console.error('解析响应数据错误:', e, '原始数据:', line);
          }
        });
      },
      fail: (err) => {
        console.error('请求失败详情:', err);
        wx.showToast({ title: '网络请求失败', icon: 'none' });
      }
    });
  }
})